package com.ruoyi.specification.service.impl;

import java.util.List;

import cn.hutool.core.collection.ListUtil;
import cn.hutool.core.util.ObjectUtil;
import com.ruoyi.specification.mapper.TSpecificationMapper;
import com.ruoyi.specification.mapper.TStatsMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import com.ruoyi.common.core.utils.StringUtils;
import org.springframework.transaction.annotation.Transactional;
import com.ruoyi.specification.domain.TStats;
import com.ruoyi.specification.domain.TSpecification;
import com.ruoyi.specification.service.ITSpecificationService;

/**
 * 实现规格查询Service业务层处理
 *
 * @author renyixuan
 * @date 2024-07-25
 */
@Service
public class TSpecificationServiceImpl implements ITSpecificationService
{
    @Autowired
    private TSpecificationMapper tSpecificationMapper;

    @Autowired
    private TStatsMapper statsMapper;



    /**
     * 查询实现规格查询
     *
     * @param id 实现规格查询主键
     * @return 实现规格查询
     */
    @Override
    public TSpecification selectTSpecificationById(Integer id)
    {
        TSpecification tSpecification = tSpecificationMapper.selectTSpecificationById(id);
        return tSpecification;
    }

    /**
     * 查询实现规格查询列表
     *
     * @param tSpecification 实现规格查询
     * @return 实现规格查询
     */
    @Override
    public List<TSpecification> selectTSpecificationList(TSpecification tSpecification)
    {
        ArrayList<TSpecification> tSpecifications = tSpecificationMapper.selectTSpecificationList(tSpecification);
        for (TSpecification specification : tSpecifications) {
            String getSpecificationGoodsStr = "";
            String getStatsNameStr= "";
//            t-通过id查找对应的属性，这个里面的id就等于子表的pid
            Integer sid = specification.getId();
            List<TStats> list = statsMapper.selectAllBySid(sid);
//            查找对应的所有的数据例如id为1的数据有四个子
            int listSize = list.size();
            for (int i = 0; i < listSize; i++) {
                TStats tStats = list.get(i);
                getSpecificationGoodsStr = getSpecificationGoodsStr + tStats.getSpecificationGoods() + ",";
                getStatsNameStr = getStatsNameStr + tStats.getStatsName() + ",";
                // 判断是否是最后一个元素
                if (i == listSize - 1) {
                }
            }
//            分割掉最后一个逗号
//设置进去
            specification.setSpecificationGoods(getSpecificationGoodsStr);
            specification.setStatsName(getStatsNameStr);
        }
        return tSpecifications;
    }

    /**
     * 新增实现规格查询
     *
     * @param tSpecification 实现规格查询
     * @return 结果
     */
    @Transactional
    @Override
    public int insertTSpecification(TSpecification tSpecification)
    {
//        获取前台传过来的下级菜单集合
        List<TStats> tStatsList = tSpecification.gettStatsList();
//这一步通过name查找看这个id在父表中是否存在
        TSpecification tSpecification1 = tSpecificationMapper.selectTSpecificationByName(tSpecification.getName());
//       如果不存在，那么就添加子表，添加主表
        if(ObjectUtil.isEmpty(tSpecification1)&&tSpecification1==null){
//            为空才添加主表
            int i1 = tSpecificationMapper.insertTSpecification(tSpecification);
//            如果不存在，那就返回主键id，并且保存到迭代的status中
            for (TStats stats : tStatsList) {
                stats.setSid(tSpecification.getId());
                statsMapper.insertTStats(stats);
            }
            return i1;
        }else {
//            如果存在，那么获取当前的id
            Integer id = tSpecification1.getId();
            int i =0;
            for (TStats stats : tStatsList) {
//                插入已存在的id
                stats.setSid(id);
               i= statsMapper.insertTStats(stats);
            }
            return  i;
        }
    }

    /**
     * 修改实现规格查询
     *
     * @param tSpecification 实现规格查询
     * @return 结果
     */
    @Transactional
    @Override
    public int updateTSpecification(TSpecification tSpecification)
    {
        return tSpecificationMapper.updateTSpecification(tSpecification);
    }

    /**
     * 批量删除实现规格查询
     *
     * @param ids 需要删除的实现规格查询主键
     * @return 结果
     */
    @Transactional
    @Override
    public int deleteTSpecificationByIds(Integer[] ids)
    {
        tSpecificationMapper.deleteTStatsBySids(ids);
        return tSpecificationMapper.deleteTSpecificationByIds(ids);
    }

    /**
     * 删除实现规格查询信息
     *
     * @param id 实现规格查询主键
     * @return 结果
     */
    @Transactional
    @Override
    public int deleteTSpecificationById(Integer id)
    {
        tSpecificationMapper.deleteTStatsBySid(id);
        return tSpecificationMapper.deleteTSpecificationById(id);
    }

    /**
     * 新增${subTable.functionName}信息
     *
     * @param tSpecification 实现规格查询对象
     */
    public void insertTStats(TSpecification tSpecification)
    {
        List<TStats> tStatsList = tSpecification.gettStatsList();
        Integer id = tSpecification.getId();
        if (StringUtils.isNotNull(tStatsList))
        {
            List<TStats> list = new ArrayList<TStats>();
            for (TStats tStats : tStatsList)
            {
                tStats.setSid(id);
                list.add(tStats);
            }
            if (list.size() > 0)
            {
                tSpecificationMapper.batchTStats(list);
            }
        }
    }
}
